import os
import shutil

# 永久删除目录中的所有文件和子目录
def clear_dir_and_file(output_dir):
    # 检查目录是否存在
    if os.path.exists(output_dir) and os.path.isdir(output_dir):
        # 遍历目录中的所有文件和子目录
        for filename in os.listdir(output_dir):
            file_path = os.path.join(output_dir, filename)
            try:
                if os.path.isfile(file_path) or os.path.islink(file_path):
                    os.unlink(file_path)  # 删除文件或符号链接
                elif os.path.isdir(file_path):
                    shutil.rmtree(file_path)  # 删除子目录及其内容
            except Exception as e:
                print(f'Failed to delete {file_path}. Reason: {e}')
    else:
        print(f"The directory {output_dir} does not exist.")


# 只删除文件而保留子目录
def clear_file(output_dir):
    """
    清空指定目录下的所有文件，但保留子目录。
    
    参数:
    output_dir (str): 需要清空文件的目录路径。
    
    返回:
    无返回值。
    """
    # 检查目录是否存在
    if os.path.exists(output_dir) and os.path.isdir(output_dir):
        # 遍历目录中的所有文件
        for filename in os.listdir(output_dir):
            file_path = os.path.join(output_dir, filename)
            try:
                # 如果是文件或符号链接，则删除
                if os.path.isfile(file_path) or os.path.islink(file_path):
                    os.unlink(file_path)  # 删除文件或符号链接
            except Exception as e:
                # 异常处理，打印删除失败的原因
                print(f'Failed to delete {file_path}. Reason: {e}')
    else:
        # 如果目录不存在，打印提示信息
        print(f"The directory {output_dir} does not exist.")




def generate_code_segments(output_dir):

    class_template = """
    else if (tableName.equals("{class_name}")){{
         List<{class_name}> list = null;
        if(startDataIndex != null && limitDataIndex != null){{
            list = influxDBService.query(sql, startDataIndex,limitDataIndex);
        }}else{{
            list = influxDBService.query(sql);
        }}
        if(null != list && list.size()>0){{
            for ({class_name} actValYsj : list) {{
                ActualTestValue actualTestValue = new ActualTestValue();
                actualTestValue.setEquipmentName(actValYsj.getEquipmentName());
                actualTestValue.setActualTime(instantToDate(actValYsj.getActualTime()));
                actualTestValue.setTestFormItemNumber(actValYsj.getTestFormItemNumber());
                actualTestValue.setTestCondition(actValYsj.getTestCondition());
                actualTestValue.setEquipmentName(actValYsj.getEquipmentName());
                actualTestValue.setConsignDpt(actValYsj.getConsignDpt());
                actualTestValue.setConsigner(actValYsj.getConsigner());
                actualTestValue.setSampleModel(actValYsj.getSampleModel());
                actualTestValue.setSampleNumber(actValYsj.getSampleNumber());
                actualTestValue.setBuId(actValYsj.getBuId());
                actualTestValue.setEquipmentTWName(actValYsj.getEquipmentTWName());
                actualTestValue.setTestFormItemMasterId(actValYsj.getTestFormItemMasterId());
                actualTestValue.setTestFormItemName(actValYsj.getTestFormItemName());
                actualTestValue.setConsigner(actValYsj.getConsigner());
                actualTestValue.setBuId(actValYsj.getBuId());
                actualTestValue.setVarStr1(actValYsj.getVarStr1());
                actualTestValue.setVarStr2(actValYsj.getVarStr2());
                actualTestValue.setVarStr3(actValYsj.getVarStr3());
                actualTestValue.setVarStr4(actValYsj.getVarStr4());
                actualTestValue.setVarStr5(actValYsj.getVarStr5());
                actualTestValue.setVarStr6(actValYsj.getVarStr6());
                actualTestValue.setVarStr7(actValYsj.getVarStr7());
                actualTestValue.setVarStr8(actValYsj.getVarStr8());
                actualTestValue.setVarStr9(actValYsj.getVarStr9());
                actualTestValue.setVarStr10(actValYsj.getVarStr10());
                actualTestValue.setVarStr11(actValYsj.getVarStr11());
                actualTestValue.setVarStr12(actValYsj.getVarStr12());
                actualTestValue.setVarStr13(actValYsj.getVarStr13());
                actualTestValue.setVarStr14(actValYsj.getVarStr14());
                actualTestValue.setVarStr15(actValYsj.getVarStr15());
                actualTestValue.setVarStr16(actValYsj.getVarStr16());
                actualTestValue.setVarStr17(actValYsj.getVarStr17());
                actualTestValue.setVarStr18(actValYsj.getVarStr18());
                actualTestValue.setVarStr19(actValYsj.getVarStr19());
                actualTestValue.setVarStr20(actValYsj.getVarStr20());
                actualTestValues.add(actualTestValue);
            }}
        }}
    }}
    """

    # 清空目录中的文件
    clear_file(output_dir)

    # 存放所有的代码片段
    file_contents = []

    # 生成48个代码片段
    for i in range(2, 48):  # 修改为生成从2到49的代码片段
        class_name = f"ActValYsj{i}"
        file_content = class_template.format(class_name=class_name)
        
        # 添加代码片段
        file_contents.append(file_content)

    # 将所有代码片段写入文件
    with open(os.path.join(output_dir, "generated_classes.java"), "w", encoding="utf-8") as file:
        # 拼接所有代码片段
        file.write("\n".join(file_contents))

    print("类已成功生成并保存到 {} 目录中。".format(output_dir))


def main():
    # 创建目标目录
    output_dir = "d:/a"
    os.makedirs(output_dir, exist_ok=True)

    # 生成代码片段
    generate_code_segments(output_dir)

if __name__ == "__main__":
    main()

